package com.xh3140.xwidget.dialog.params;


import android.content.Context;
import android.view.Gravity;

import androidx.annotation.ColorInt;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Px;
import androidx.annotation.Size;
import androidx.annotation.StyleRes;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;

/**
 * 对话框配置属性
 * 每一个属性都有默认的设定值
 * 在创建对话框时这些属性可以自定义修改
 */
public final class DialogParams extends AbstractParams {
  /**
   * 位置
   * 这个位置是相对于应用窗口的
   */
  public int gravity = Gravity.CENTER;

  /**
   * 背景是否昏暗
   * true 背景昏暗
   * false 背景不昏暗
   */
  public boolean dimEnabled = true;

  /**
   * 返回键是否关闭
   * true 表示按下应用返回键时会触发关闭
   * false 表示按下应用返回键时不会触发关闭
   */
  public boolean cancelable = true;

  /**
   * 是否点击外部关闭
   * true 表示点击外部时会触发关闭
   * false 表示点击外部时不会触发关闭
   */
  public boolean canceledOnTouchOutside = true;

  /**
   * 透明度，范围：0-255；255不透明
   * 范围：0 - 255
   * 值越小表示越透明
   * 0x00 完全透明
   * 0xFF 完全不透明
   */
  @IntRange(from = 0x00, to = 0xFF)
  public int alpha = 0xFF;

  /**
   * 宽度
   * 在0-1范围内：表示的是宽度相对窗口宽度所占的百分比
   * 大于1时：表示宽度的真实像素值
   */
  public float width = 0.9f;

  /**
   * 最小高度
   * 在0-1范围内：表示的是最小高度相对窗口高度所占的百分比
   * 大于1时：表示最大高度的真实像素值
   * 当的实际高度小于这个高度时，会被限制在这个高度值
   */
  public float minHeight = 0f;

  /**
   * 最大高度
   * 在0-1范围内：表示的是最大高度相对窗口高度所占的百分比
   * 大于1时：表示最大高度的真实像素值
   * 当的实际高度大于这个高度时，会被限制在这个高度值
   */
  public float maxHeight = 0.75f;

  /**
   * 窗口动画资源ID
   */
  @StyleRes
  public int windowAnimations = 0;

  /**
   * 背景颜色 argb
   */
  @ColorInt
  public int backgroundColor = 0xFFF8F8F8;

  /**
   * 分割线显示方式
   * 如果这个值小于0，分割线只会在适当的时候显示在按钮上方
   */
  public int showDividers = -1;

  /**
   * 分割线颜色 argb
   */
  @ColorInt
  public int dividerColor = 0xFFD7D7DB;

  /**
   * 分割线厚度 px
   */
  @Px
  public int dividerThickness = dp2px(1);

  /**
   * 外边距
   * 格式：[start, top, end, bottom] px
   */
  @Nullable
  @Size(4)
  public int[] margins = null;

  /**
   * 圆角半径 px
   */
  @Px
  public int radius = dp2px(8);

  /**
   * X坐标偏移 px
   */
  @Px
  public int offsetX = 0;

  /**
   * Y坐标偏移 px
   */
  @Px
  public int offsetY = 0;

  /**
   * Fragment管理者
   */
  @Nullable
  public FragmentManager manager;

  public DialogParams(@NonNull Context context) {
    super(context);
    manager = null;
  }

  public DialogParams(@NonNull FragmentActivity activity) {
    super(activity);
    manager = activity.getSupportFragmentManager();
  }

  public DialogParams(@NonNull Fragment fragment) {
    super(fragment.requireContext());
    manager = fragment.getParentFragmentManager();
  }
}